package com.ja.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * Created by 86151 on 2019/4/24.
 */
@Aspect
@Component
@Slf4j
public class AspectTest {
    @Pointcut("execution(public * com.zx.planclass.controller.*.*(..))")
    public void poincut(){

    }
    @Before("poincut()")
    public void beforeTest()throws Exception{
        //System.out.println("我是操作controller之前的输出！");
        //日志记录，记录浏览器都请求了我们哪些接口，请求的方式是什么；
        log.info("我是操作controller之前的测试！");
        log.error("错误日志");
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
        String method = request.getMethod();
        String url = request.getRequestURI();
        log.info("方法名称=="+method);
        log.info("地址=="+url);
        //安全验证，验证是否是合法请求
        //一般，会定义一个token字段，通过url获取到token值，查询自己数据库中是否存在此值，或者查询配置中是否存在此token,
        //如果存在允许访问后台服务，如果不存在，禁止访问，并抛出异常。
       /* String token = request.getParameter("token");
        if (!token.equals("123")){
            throw new Exception();
        }*/

        //事务处理是spring底层已经集成好了，不需要手工配置。
    }

    @After("poincut()")
    public void afterTest(){
        //System.out.println("我是操作controller之后的输出！");
    }
}
